package topk;

import java.util.PriorityQueue;

public class Test {

    public static void main(String[] args) {
        int[] arr = {8,5,3,1,9,0,4,6,7,2};
        // 求 top k 使用小根堆
        PriorityQueue<Integer> queue = new PriorityQueue<>(5);
        // 思路：向小跟堆中塞 k 个元素，后续让 n - k 个元素和堆顶比较，如果比堆顶大，就删除堆顶，当前元素入堆即可
        for (int i = 0; i < 5; i++) {
            queue.offer(arr[i]);
        }
        for (int i = 5; i < arr.length; i++) {
            if (queue.peek() < arr[i]) {
                queue.poll();
                queue.offer(arr[i]);
            }
        }
        // 遍历结果
        for (int i = 0; i < 5; i++) {
            System.out.printf(queue.poll() + " ");
        }
    }
}
